#ifndef UTILITY_MOVEONLY_H
#define UTILITY_MOVEONLY_H

#define MOVEONLY(Cls)                     \
    Cls(const Cls &) = delete;            \
    Cls(Cls &&) = default;                \
    Cls &operator=(const Cls &) = delete; \
    Cls &operator=(Cls &&) = default


/// @class object-reference sematics derived

class MoveOnly
{
protected:
    MoveOnly() = default;
    ~MoveOnly() = default;

    MOVEONLY(MoveOnly);
};



#endif